//
//  DYWHomeController.swift
//  sinaWeibo
//
//  Created by 董艳武 on 16/1/30.
//  Copyright © 2016年 董艳武. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD
class DYWHomeController: DYWCommonController {
    
    /// 下拉刷新属性
    var refresh:DYWRefreshControl?
    
    /// 懒加载下拉的菊花
    private lazy var bottomPull:UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)

    /// 模型数组属性
    private lazy var modelArr = [DYWWeiboModel]()
    
    /// 可重用 cell 的 id
    var cellId = "homeCell"
    
    override func viewDidLoad() {
        super.viewDidLoad()

        if isVisitor {
            
            visitorView?.setupUIInfo("关注一些人，回这里看看有什么惊喜", imgName: nil)
            return
        }
        setTableView()
        loadData()
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
       
    }
    
    /// 设置 tableView 的属性
    private func setTableView () {
        // MARK:--为 tableView 注册 cell
        self.tableView.registerClass(DYWHomeCell.self, forCellReuseIdentifier: cellId)
        // 设置不显示垂直 滑动条
        tableView.showsVerticalScrollIndicator = false
        
        //       self.tableView.rowHeight = 300
        // MARK:--设置自动行高
        //        tableView.estimatedRowHeight = 300
        //        tableView.rowHeight = UITableViewAutomaticDimension
        
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        
//        self.refreshControl = UIRefreshControl()
//        self.refreshControl?.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        self.refresh = DYWRefreshControl();
        self.view.addSubview(refresh!);
        refresh!.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        tableView.tableFooterView = bottomPull
//        bottomPull.startAnimating()
        
        // 点击状态栏快四回到顶部
        // 默认值是 yes
        // On iPhone, we execute this gesture only if there's one on-screen scroll view with `scrollsToTop` == YES. If more than one is found, none will be scrolled.
        // 当前屏幕上有且仅有一个 scrollView（或者它的子类）的 scrollsToTop == YES 才会有效得执行。如果超过一个，则不会执行
        self.tableView.scrollsToTop = true


    }
    
    /// 数据转模型
    @objc private func loadData () {
        self.refreshControl?.beginRefreshing()
        
        
        // url
        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
        
        guard let access_token:String = DYWOauthViewModel.sharedInstance.access_token else {
            SVProgressHUD.showErrorWithStatus("网络加载出现错误/(ㄒoㄒ)/~~😱")
            return
        }
        
        let afn = AFHTTPSessionManager()
        var params = [
            "access_token":access_token,
        ]
        /// 若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0。
        var since_id:Int64 = 0
        
        /// 若指定此参数，则返回ID小于或等于max_id的微博，默认为0。若大于0，要减一
        var max_id:Int64 = 0
        
        if self.bottomPull.isAnimating() {
            max_id = self.modelArr.last?.id ?? 0
        } else {
            since_id = self.modelArr.first?.id ?? 0
        }
        
        print(since_id)
        
        print(max_id)
        
        if since_id > 0 {
            params["since_id"] = "\(since_id)"
        }
        if max_id > 0 {
            params["max_id"] = "\(max_id - 1)"
            print(max_id - 1)
        }
        /*
        since_id 请求参数，根据微博的id 返回新的数据
        */
        afn.GET(urlString, parameters: params, progress:nil, success: { (_,result) -> Void in
            UIView.animateWithDuration(1.2, animations: { () -> Void in
                self.refreshControl?.endRefreshing()
//                self.refresh?.status = .Normal
                self.refresh?.endRefreshing()

            })
            // MARK:--判断网络获取到的字典是否为空
            guard let dict = result as? [ String : AnyObject ] else {
                SVProgressHUD.showErrorWithStatus("网络加载出现错误/(ㄒoㄒ)/~~😱")
                return
            }
            
            // MARK:--取出字典中的 statues 数组
            guard let arr = dict["statuses"] as? [[String:AnyObject]]  else {
                SVProgressHUD.showErrorWithStatus("网络加载出现错误/(ㄒoㄒ)/~~😱")
                return

            }
            
            var tempArr = [DYWWeiboModel]()
            
            // MARK:--遍历数组，字典转模型
            for temp in arr {
             
                let model = DYWWeiboModel(dict: temp)
                tempArr.append(model)
                
            }
            
            // MARK:--将模型数组赋值给模型数组属性
            /*
            当第一次进入程序时，since_id 的值为 0 ，再次刷新时，since_id 的值为数组中最后一条记录的值
            */
            if since_id > 0 {
            // 将返回的新的数据添加到数组中
            self.modelArr = tempArr  + self.modelArr
            
            } else if max_id > 0 {
                self.modelArr = self.modelArr + tempArr
                print(self.modelArr.count)

                self.bottomPull.stopAnimating()
            } else {
                // 第一次加载时获取到的数据
                self.modelArr = tempArr
            }
            self.tableView.reloadData()
           
            
            }) { (_, error) -> Void in
                print(error)
                SVProgressHUD.showErrorWithStatus("网络错误/(ㄒoㄒ)/~~")
                self.bottomPull.stopAnimating()
                
        }
    }
}
// MARK:--tableView的数据源方法
extension DYWHomeController {
    
    // MARK:-- section 数量
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    
    // MARK:-- cell 的数量
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.modelArr.count
    }
    
    // MARK:-- cell 的样式
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath) as! DYWHomeCell
        // 当显示到最后一条微博时，下拉的小菊花开始转动
        if indexPath.row == self.modelArr.count - 1 && !self.bottomPull.isAnimating() {
            self.bottomPull.startAnimating()
            loadData()
        }
        cell.model = modelArr[indexPath.row]
        return cell
    }
    
    // MARK:-- 设置行高
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }

    override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }
}
